package com.ctshk.rpc.system.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.rpc.system.dto.*;
import com.ctshk.rpc.system.req.*;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-01-11
 */
public interface ISysAreaService {

    /**
     * 更新缓存
     */
    void updateElasticSearch();

    /**
     * 模糊查询地点 ES缓存
     *
     * @param areaQueryReq
     * @return
     */
    List<AreaDTO> queryListEs(AreaQueryReq areaQueryReq);

    /**
     * 條件查询地点 ES缓存
     *
     * @param req
     * @return
     */
    List<AreaDTO> queryListEsWhere(AreaQueryWhereReq req);

    /**
     * 层级查询 父子级查询 ES缓存
     *
     * @param req
     * @return
     */
    List<AreaDTO> queryListEsByLevel(AreaQueryLevelReq req);

    /**
     * 查询城市数据合并树桩结构
     *
     * @param req
     * @return
     */
    JSONArray queryListEsByLevelTwo(AreaILevelReq req);


    /**
     * 查询 ES缓存
     *
     * @param id
     * @return
     */
    AreaDTO queryByEsId(Long id);

    /**
     * 查询 ES缓存
     *
     * @param ids
     * @return
     */
    List<AreaDTO> queryAreaDTOListByEsIds(List<Long> ids);

    /**
     * 查询 ES缓存
     *
     * @param ids
     * @return
     */
    List<AreaTreeListDTO> queryByEsIds(List<Long> ids);

    /**
     * 查询一级 ES缓存
     *
     * @param name
     * @return
     */
    List<AreaDTO> esOneLevel(String name);

    /**
     * 查询区域列表
     *
     * @param areaQueryReq 查询擦买手机
     * @return 区域列表数据
     */
    PageResponse<AreaDTO> queryList(AreaQueryReq areaQueryReq);

    /**
     * 新增国家区域
     *
     * @param areaAddReq 国家区域参数
     * @param userId     用户id
     */
    Result add(AreaAddReq areaAddReq, Long userId);

    /**
     * 修改国家区域
     *
     * @param areaAddReq 国家区域参数
     * @param userId     用户id
     */
    void update(AreaAddReq areaAddReq, Long userId);

    /**
     * 删除国家区域
     *
     * @param areaIdReq 国家区域id
     * @param userId    用户id
     */
    void delete(AreaIdReq areaIdReq, Long userId);

    /**
     * 数据转换方法（只用于国家级区域进行转换）
     */
    void test();

    /**
     * 查询国家区域树
     *
     * @return 国家区域树
     */
    List<AreaTreeDTO> queryAreaTree();

    /**
     * 模糊查询查询GET
     *
     * @param name
     * @return
     */
    List<AreaTreeListDTO> queryAreaLikeName(String name);

    /**
     * 模糊查询查询POST
     *
     * @param req
     * @return
     */
    PageResponse<AreaTreeListDTO> queryAreaLikeNamePost(AreaQueryLikeNameReq req);

    /**
     * @param req
     * @return
     */
    AreaTreeListDTO queryById(AreaQueryIdReq req);

    /**
     *
     * @param req
     * @return
     */
    List<AreaTreeListDTO> queryByIds(List<Long> ids);

    /**
     * @param req
     * @return
     */
    AreaHasChildrenDTO queryArea(AreaIdReq req);

    /**
     * 返回id下子集
     *
     * @param req 区域id
     * @return 返回id下子集
     */
    AreaChildrenDTO queryAreaChildren(AreaIdReq req);

    /**
     * 返回第一级区域国家
     *
     * @return 返回第一级区域国家
     */
    List<AreaHasChildrenDTO> queryFirstArea();

    /**
     * 查询区域
     *
     * @param
     * @return 区域数据
     */
    AreaDTO query(AreaQueryReq areaQueryReq);

    /**
     * 查询名称精确匹配
     * type 1县 2市 3省
     *
     * @param
     * @return
     */
    AreaDTO query(String name, int type);

    /**
     * 定时任务每天凌晨吊起一次
     *
     * @param
     * @return
     */
    Result refreshTask();
}
